import dayjs from 'dayjs';
import md5 from 'md5';
import { customRef, ref } from "vue"

/**
 * 格式化时间
 */
export function formatTime(
  date?: string | number | Date | dayjs.Dayjs | null | undefined,
  template?: string | undefined
) {
  return dayjs(date).format(template);
}

/**
 *
 * 格式化时间
 */
export function timeAgo(
  date?: string | number | Date | dayjs.Dayjs | null | undefined,
  template?: string
) {
  const d = dayjs(date).valueOf();
  const now = Date.now();
  const diff = (now - d) / 1000;
  if (diff < 3600) {
    return Math.ceil(diff / 60) + '分钟前';
  } else if (diff < 3600 * 24) {
    return Math.ceil(diff / 3600) + '小时前';
  } else {
    return formatTime(date, template);
  }
}

/**
 * md5加密
 */
export function md5Encryption(
  message: string | Buffer | number[] | Uint8Array
) {
  const KEY = md5('LULU Derivation');
  return md5(KEY + md5(message));
}

/**
 * 类型检查
 */

export function typeCheck(param: any) {
  return Object.prototype.toString.call(param);
}

/**
 * 批量修改stage
 */
export function mutateState(state: AnyObject, payload: AnyObject) {
  if (
    typeCheck(state) === '[object Object]' &&
    typeCheck(payload) === '[object Object]'
  ) {
    for (const key in payload) {
      state[key] = payload[key];
    }
  } else {
    console.error('expected plain Object');
  }
}

/**
 * 防抖
 */
export function debounceRef (data:any, delay = 300){
  let timer: NodeJS.Timeout | null = null;
  return delay == null
    ?
    ref(data)
    :
    customRef((track, trigger) => {
      return {
        get () {
          track()
          return data
        },
        set (value) {
          if(timer != null){
            clearTimeout(timer)
            timer = null
          }
          timer = setTimeout(() => {
            data = value;
            trigger()
          }, delay)
        }
      }
    })
}

//计算两个时间之间的时间差 多少天时分秒
export function timeFn(d1: string,d2: string) {//di作为一个变量传进来
  //如果时间格式是正确的，那下面这一步转化时间格式就可以不用了
  var dateBegin = new Date(d1.replace(/-/g, "/"));//将-转化为/，使用new Date
  var dateEnd = new Date(d2.replace(/-/g, "/"));//获取当前时间
  var dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
  var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
  var leave1=dateDiff%(24*3600*1000)    //计算天数后剩余的毫秒数
  var hours=Math.floor(leave1/(3600*1000))//计算出小时数
  //计算相差分钟数
  var leave2=leave1%(3600*1000)    //计算小时数后剩余的毫秒数
  var minutes=Math.floor(leave2/(60*1000))//计算相差分钟数
  //计算相差秒数
  var leave3=leave2%(60*1000)      //计算分钟数后剩余的毫秒数
  var seconds=Math.round(leave3/1000)
  console.log(" 相差 "+dayDiff+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒")
  console.log(dateDiff+"时间差的毫秒数",dayDiff+"计算出相差天数",leave1+"计算天数后剩余的毫秒数"
    ,hours+"计算出小时数",minutes+"计算相差分钟数",seconds+"计算相差秒数");
}
